/**
 * \file debug.c
 * \author Davide Gessa
 * \date 10-12-09
 */
#include <debug.h>
#include <arch.h>
#include <types.h>

/**
 * Scrive un carattere nella console di debug di bochs
 * 
 * \param c carattere da scrivere nell'interfaccia di debug
 */
void debug_putchar(char c)
{
	io_outb(0xe9, c);
}


/**
 * Scrive una stringa di debug
 * 
 * \param str stringa da scrivere
 */
void debug_puts(char *str)
{
	while(*str != '\0')
	{
		debug_putchar(*str);
		str++;
	}	
}


/**
 * Inizializza l'interfaccia di debug
 */
void debug_init()
{
	io_outw(BOCHS_IODEBUG_PORT, 0x8A00);
}


/**
 * Imposta lo stato dell'interfaccia di tracing delle istruzioni
 * 
 * \param status stato da impostare
 */
void debug_ist_trace(uint8_t status)
{
	if(status)	io_outw(BOCHS_IODEBUG_PORT, 0x8AE3);
	else 		io_outw(BOCHS_IODEBUG_PORT, 0x8AE2);
}


/**
 * Imposta lo stato dell'interfaccia di tracing dei registri
 * 
 * \param status stato da impostare
 */
void debug_reg_trace(uint8_t status)
{
	if(status)
	{
		debug_ist_trace(1);
		io_outw(BOCHS_IODEBUG_PORT, 0x8AE5);
	}
	else
	{
		debug_ist_trace(0);
		io_outw(BOCHS_IODEBUG_PORT,0x8AE4);
	}
}
